// 导入模拟后台的接口
import { login, loginOut, whoAmI } from "@/api/user";

export default {
	// 使用命名空间，避免命名冲突，开启后，除在本模块中可以省略，使用时必须加上命名空间，例如：this.$store.commit("loginUser/setUser", user);
	namespaced: true, // 开启命名空间
	state: {
		isLoading: false,
		user: null,
	},
	getters: {
		status(state) {
			if (state.isLoading) {
				return "loading";
			} else if (state.user) {
				return "login";
			} else {
				return "logout";
			}
		},
	},
	mutations: {
		setUser(state, user) {
			state.user = user;
		},
		setLoading(state, isLoading) {
			state.isLoading = isLoading;
		},
	},
	actions: {
		async login(ctx, userInfo) {
			// 登录的 action
			ctx.commit("setLoading", true);
			const result = await login(userInfo.loginId, userInfo.loginPwd);
			ctx.commit("setUser", result);
			ctx.commit("setLoading", false);
			return result;
		},
		async loginOut(ctx) {
			// 注销的 action
			ctx.commit("setLoading", true);
			await loginOut();
			ctx.commit("setUser", null);
			ctx.commit("setLoading", false);
		},
		async whoAmI(ctx) {
			// 获取当前用户的 action
			ctx.commit("setLoading", true);
			const result = await whoAmI();
			ctx.commit("setUser", result);
			ctx.commit("setLoading", false);
		},
	},
};
